'use strict';
var _ = require('lodash');
var arrayJs = require('@/libs/array');
function ajaxController($scope){
    var text = `    // lodash 全面替换我之前的工具库
        //////////////////////////////////////////////////////////////////////////////
        // 一个数组是否包含一个指定的值
        // 返回指定的值的下标
        // =====================
        // liuyp 2019年6月6日17:52:43 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.indexOf([1, 2, 1, 2], 2) == 1,result_flag_here
        _bs(_.indexOf([1, 2, 3], 2) == 1,result_flag_here
        _bs(_.indexOf([1, 2, 3], 4) == -1,result_flag_here
        _bs(_.indexOf([1, 2, null], null) == 2,result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 数组循环处理
        // 创建一个新数组，其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.map([4, 8], function (n) {return n * n}).toString() == '16,64',result_flag_here
        _bs(_.map([{'user': 'Bb'}, {'user': 'Aa'}], 'user').toString() == 'Bb,Aa',result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 检测是否 全员/单员 符合条件
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.every([{'user': 'Bb', 'do': true}, {'user': 'Aa', 'do': false}], {'user': 'Bb', 'do': false}) == false,result_flag_here
        _bs(_.every([{'user': 'Bb', 'do': true}, {'user': 'Aa', 'do': false}], 'do') == false,result_flag_here
        _bs(_.some([{'user': 'Bb', 'do': true}, {'user': 'Aa', 'do': false}], {'user': 'Bb', 'do': false}) == false,result_flag_here
        _bs(_.some([{'user': 'Bb', 'do': true}, {'user': 'Aa', 'do': false}], 'do') == true,result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 数组唯一化
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.uniq([2, 1, 2, 1, 2, 3]).toString() == '2,1,3',result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 逐条处理数组内容 用于遍历数组,或可迭代对象
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _.forEach([1, 2], function(value) { console.log(value); });
        _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { console.log(key); });
        //////////////////////////////////////////////////////////////////////////////
        // 数组部分移除 影响元数组
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.remove([1, 2, 3, 4], function(n) { return n % 2 == 0; }).length == 2,result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 去掉所有符合条件的内容 返回新数组
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.dropWhile([{'user': 'Bb', 'do': false}, {'user': 'Aa', 'do': false}, {'user': 'Cc', 'do': true} ], function(o) { return !o.do }),result_flag_here
        _bs(_.dropWhile([{'user': 'Bb', 'do': false}, {'user': 'Aa', 'do': false}, {'user': 'Cc', 'do': true} ], {'user': 'Bb', 'do': false}),result_flag_here
        _bs(_.dropWhile([{'user': 'Bb', 'do': false}, {'user': 'Aa', 'do': false}, {'user': 'Cc', 'do': true} ], 'do'),result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 深度克隆
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.cloneDeep([{ 'a': 1}, {'b': 2}]),result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 交集/差集/并集/补集
        // 新数组,不伤源头
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.difference([2, 1], [2, 3]).toString() == '1',result_flag_here
        _bs(_.xor([2, 1], [2, 3]).toString() == '1,3',result_flag_here
        _bs(_.uniq(_.concat([2, 1], [2, 3])).toString() == '2,1,3',result_flag_here
        _bs(_.intersection([2, 1], [2, 3]).toString() == '2',result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 数组简化为一维
        // 新数组,不伤源头
        // =====================
        // liuyp 2019年6月9日12:17:17 lodash解决方案
        //////////////////////////////////////////////////////////////////////////////
        _bs(_.flattenDeep([1, [2, [3, [4]], 5]]).toString() == '1,2,3,4,5',result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 数组唯一化
        // =====================
        // liuyp 2018年12月20日11:28:08
        //////////////////////////////////////////////////////////////////////////////
        _bs(arrayJs.unique([1,2,3,4,4,4]).toString() == '1,2,3,4',result_flag_here
        //////////////////////////////////////////////////////////////////////////////
        // 数组唯一化(对象数组)
        // =====================
        // liuyp 2019年8月21日15:36:43
        //////////////////////////////////////////////////////////////////////////////
        _bs(arrayJs.uniqueObj([{a:1}, {a:1}, {a:2}], function(a, b){return a.a==b.a}).length == 2,result_flag_here
    `;
    var dotest = function(code){
        try {
            var r = eval("("+code+")");
            if( r !== true && code.indexOf('==') > -1 ){ return '异常 ' + eval("("+ code.replace(/\=\=.*/, '') +")") }
            return r
        } catch(e){
            console.error("单元测试代码错误", e)
            return "UNITTESTERROR"
        } };
    text = text.replace(/\_bs\((.*)\,result\_flag\_here/g,function(a,b,c){
        var result = dotest(b);
        if( result === true ){ result = "UNITTESTOK" }
        return "UNITTESTTEST "+b+" UNITTESTRESULT "+ JSON.stringify(result)
    })
    $("#templateAPI").html(
        text.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n[ ]{4}/g, '\n')
            .replace(/UNITTESTTEST/g, '<font color="#3333ff">测试代码: ')
            .replace(/UNITTESTRESULT/g, '</font><font color="#3333cc">结果</font>')
            .replace(/UNITTESTOK/g, '<span style="color: #4caf50;">单元测试通过</span>')
            .replace(/UNITTESTERROR/g, '<span style="color: #ff3300;">代码错误</span>')
    );
}
exports = module.exports = ajaxController;